﻿using System.Collections.Generic;
using UnityEngine;

namespace EchoFramework
{
    /// <summary>
    /// 游戏角色管理器
    /// </summary>
    public class SpriteManager : Singleton<SpriteManager>
    {
        /// <summary>
        /// 游戏场景中的角色字典
        /// key:角色ID
        /// value:角色对象
        /// </summary>
        private Dictionary<int, SpriteBase> spriteDict = new Dictionary<int, SpriteBase>();

        public override void OnUpdate()
        {
            base.OnUpdate();
            foreach (SpriteBase spriteDictValue in spriteDict.Values)
            {
                spriteDictValue.OnUpdate();
            }
        }

        public override void OnFixedUpdate()
        {
            base.OnFixedUpdate();
            foreach (SpriteBase spriteDictValue in spriteDict.Values)
            {
                spriteDictValue.OnFixedUpdate();
            }
        }

        /// <summary>
        /// 添加到角色字典
        /// </summary>
        /// <param name="spriteId">角色ID</param>
        /// <param name="spriteBaseObj">角色对象</param>
        public void AddToSpiteDict(int spriteId, SpriteBase spriteBaseObj)
        {
            if (spriteDict.ContainsKey(spriteId))
            {
                Debug.LogWarning($"存在同样SpriteID:{spriteId}的游戏对象");
            }
            else
            {
                if (spriteBaseObj == null)
                {
                    Debug.LogWarning($"SpriteID:{spriteId} 的游戏对象为null");
                }
                else
                {
                    spriteDict.Add(spriteId, spriteBaseObj);
                }
            }
        }

        /// <summary>
        /// 从角色字典中删除
        /// </summary>
        /// <param name="spriteId">角色ID</param>
        public void RemoveFromSpriteDict(int spriteId)
        {
            if (!spriteDict.ContainsKey(spriteId))
            {
                Debug.LogWarning($"不存在SpriteID的游戏对象:{spriteId}");
            }
            else
            {
                spriteDict.Remove(spriteId);
            }
        }

        /// <summary>
        /// 从角色字典中获取角色对象
        /// </summary>
        /// <param name="spriteId">角色ID</param>
        public SpriteBase GetSprite(int spriteId)
        {
            if (!spriteDict.ContainsKey(spriteId))
            {
                Debug.LogWarning($"不存在SpriteID的游戏对象:{spriteId}");
                return null;
            }

            return spriteDict[spriteId];
        }

        /// <summary>
        /// 从角色字典中获取角色对象
        /// </summary>
        /// <param name="spriteId">角色ID</param>
        /// <typeparam name="T">继承于SpriteBase</typeparam>
        public T GetSprite<T>(int spriteId) where T : SpriteBase
        {
            if (!spriteDict.ContainsKey(spriteId))
            {
                Debug.LogWarning($"不存在SpriteID的游戏对象:{spriteId}");
                return null;
            }

            return spriteDict[spriteId] as T;
        }
    }
}